package com.dp.client.views.configuracion;

import java.util.ArrayList;
import java.util.List;

import com.dp.client.dto.ConfiguracionDTO;
import com.dp.client.servicios.configuracion.IServiciosConfiguracion;
import com.dp.client.servicios.configuracion.IServiciosConfiguracionAsync;
import com.dp.client.util.Alerts;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.DateLabel;

public class ConfiguracionPrincipal extends Composite {
	private FlexTable ConfiguracionTable;

	public ConfiguracionPrincipal() {
		
		
		CaptionPanel upperPanel = new CaptionPanel();
		upperPanel.setCaptionText("Configuracion");
		
		initWidget(upperPanel);
		upperPanel.setSize("auto", "auto");
		VerticalPanel verticalPanel = new VerticalPanel();
		upperPanel.add(verticalPanel);
		
		CaptionPanel cptnpnlNewPanel = new CaptionPanel("");
		verticalPanel.add(cptnpnlNewPanel);
		
		VerticalPanel verticalPanel_1 = new VerticalPanel();
		cptnpnlNewPanel.setContentWidget(verticalPanel_1);
		verticalPanel_1.setSize("100%", "3cm");
		
		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();
		verticalPanel_1.add(horizontalPanel_2);
		
		Button btnCrearNuevo = new Button("Crear nuevo");
		horizontalPanel_2.add(btnCrearNuevo);
		
		Button btnRefrescar = new Button("Refrescar");
		btnRefrescar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				refrescarTabla();
			}
		});
		horizontalPanel_2.add(btnRefrescar);
		btnCrearNuevo.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				ConfiguracionDialog ConfiguracionDialog = new ConfiguracionDialog(null);
				
				ConfiguracionDialog.center();
				ConfiguracionDialog.addCloseHandler(new CloseHandler<PopupPanel>() {
					@Override
					public void onClose(CloseEvent<PopupPanel> event) {
						refrescarTabla();
					}
				});
			}
		});
		
		ConfiguracionTable = new FlexTable();
		verticalPanel_1.add(ConfiguracionTable);
		ConfiguracionTable.setWidth("100%");
		
		Label lblCodigo_1 = new Label("Codigo");
		ConfiguracionTable.setWidget(0, 0, lblCodigo_1);
		
		Label lblNombre = new Label("Descripcion");
		ConfiguracionTable.setWidget(0, 1, lblNombre);
		
		Label lblApellido_2 = new Label("Valor");
		ConfiguracionTable.setWidget(0, 2, lblApellido_2);
		lblApellido_2.setWidth("100%");
		
		//init
		refrescarTabla();
	}

	private void refrescarTabla(){
		IServiciosConfiguracionAsync serviciosConfiguracion = GWT.create(IServiciosConfiguracion.class);
		serviciosConfiguracion.listConfiguracions(new AsyncCallback<List<ConfiguracionDTO>>() {
			
			@Override
			public void onSuccess(List<ConfiguracionDTO> result) {
				setTablaConfiguracion(result);
			}
			
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
	}
	
	private void setTablaConfiguracion(List<ConfiguracionDTO> Configuracion){
		while(ConfiguracionTable.getRowCount() > 1) ConfiguracionTable.removeRow(1);
		for(final ConfiguracionDTO configuracion : Configuracion){
			
			int row = ConfiguracionTable.getRowCount();
			
			final int id = configuracion.getId();
			ConfiguracionTable.setText(row, 0, "" + configuracion.getId());
			ConfiguracionTable.setText(row, 1, configuracion.getDescripcion());
			ConfiguracionTable.setText(row, 2, "" + configuracion.getValor());
			HorizontalPanel hor = new HorizontalPanel();
			hor.add(new Button("Info", new ClickHandler(){
				public void onClick(ClickEvent event) {
					//muestra info;
				}
			}));
			hor.add(new Button("Modificar", new ClickHandler(){
				public void onClick(ClickEvent event) {
					ConfiguracionDialog configuracionDialog = new ConfiguracionDialog(null);
					configuracionDialog.center();
					configuracionDialog.addCloseHandler(new CloseHandler<PopupPanel>() {
						@Override
						public void onClose(CloseEvent<PopupPanel> event) {
							refrescarTabla();
						}
					});
				}
			}));
			hor.add(new Button("Eliminar", new ClickHandler(){
				public void onClick(ClickEvent event) {
					if(Alerts.confirmacionEliminacion()){
						IServiciosConfiguracionAsync serviciosConfiguracion = GWT.create(IServiciosConfiguracion.class);
						serviciosConfiguracion.eliminarConfiguracion(id, new AsyncCallback<Boolean>() {
						
							@Override
							public void onSuccess(Boolean result) {
								Alerts.dialogExitoEliminacionDeObjeto("Configuracion");
								refrescarTabla();
							}
						
							@Override
							public void onFailure(Throwable caught) {
								Alerts.dialogErrorConexion();
							}
						});
					}
				}
			}));
			ConfiguracionTable.setWidget(row, 3, hor);
		}
	}
}

